#include<iostream>
#include<unordered_map>
#include<cstring>
using namespace std;
const int N=1e6+10;
int a[N];
int main()
{
	int k;cin>>k;
	while(k--)
	{
		memset(a,0,sizeof(a));//多组数据及时清空存储位置数据
		int n;cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		int left=1,right=1;
		unordered_map<int,int> mp;
		int ret=0;
	//1.方法一：此时不论结果状态是否满足，right进入后判断是否合法，如果不合法让left出去，
	//重点在于：每次ret判断一定合法
	//  while(right<=n)
	// 	{
	// 		mp[a[right]]++;
	// 		while(mp[a[right]]>1)
	// 		{
	// 			mp[a[left]]--;
	// 			left++;
	// 		}
	// 		ret=max(ret,right-left+1);
	// 		right++;
	// 	}


	//2.方法二：
		while(right<=n)
		{
			if(mp[a[right]])
			{
				mp[a[left]]--;
				left++;
			}
			else
			{
				mp[a[right]]++;
				cout<<right<<" "<<left<<endl;
				ret=max(ret,right-left+1);
				right++;
			}
		}
		cout<<ret<<endl;
	}
}
